package cn.lyjuan.pojoutils.util;

import cn.lyjuan.base.util.StringUtils;

/**
 * Created by ly on 2014/11/21.
 */
public class PojoUtils
{
    /**
     * 将POJO类名转换成需要使用的对象名<br />
     * 如:UserClassPojo --> userClass<br />
     * UserPojo --> user
     *
     * @param pojoName
     * @param suffix
     * @return
     */
    public static String pojoName2ObjName(String pojoName, String suffix)
    {
        if (StringUtils.isNull(pojoName)) return "";
        // 首字母转小写
        if (pojoName.length() < 1) pojoName = pojoName.toLowerCase();
        else
            pojoName = pojoName.substring(0, 1).toLowerCase() + pojoName.substring(1);

        if (StringUtils.isNull(suffix)) return pojoName;

        return pojoName.replace(suffix, "");
    }

    /**
     * 首字母大小写转换
     * @param str
     * @param toUpcase      true表示将首字母转换为大小；false表示将首字母转换为小写
     * @return
     */
    public static String firstUpLowCase(String str, boolean toUpcase)
    {
        if (StringUtils.isNull(str))
            return "";

        // 首字母大写
        if (str.length() < 2)
            str = toUpcase ? str.toUpperCase() : str.toLowerCase();
        else
            str = (toUpcase ? str.substring(0, 1).toUpperCase() : str.substring(0, 1).toLowerCase()) + str.substring(1);

        return str;
    }

    /**
     * 判断是否为数字类型
     * @param javaTypeName  类型简称
     * @return
     */
    public static boolean isTypeNum(String javaTypeName)
    {
        if ("int".equals(javaTypeName.toLowerCase())
                || "long".equals(javaTypeName.toLowerCase())
                || "double".equals(javaTypeName.toLowerCase())
                || "float".equals(javaTypeName.toLowerCase()))
            return true;

        return false;
    }

    /**
     * 判断是否为字符串类型
     * @param javaTypeName  类型简称
     * @return
     */
    public static boolean isTypeString(String javaTypeName)
    {
        return "string".equals(javaTypeName.toLowerCase());
    }

    /**
     * 全小写Java类名转换为类中引用的正确类型名
     * @param lowTypeName
     * @return
     */
    public static String typeCaseForClass(String lowTypeName)
    {
        if ("string".equals(lowTypeName))
            return "String";
        else if ("int" .equals(lowTypeName))
            return "int";
        else if ("date".equals(lowTypeName))
            return "Date";
        else if ("long".equals(lowTypeName))
            return "long";
        else if ("float".equals(lowTypeName))
            return "float";
        else if ("double".equals(lowTypeName))
            return "double";
        else if ("char".equals(lowTypeName))
            return "char";
        else if ("byte".equals(lowTypeName))
            return "byte";

        throw new RuntimeException("unknow java type: "+ lowTypeName);
    }
}
